#!/usr/bin/perl -w

use strict;
use warnings;
use File::Basename;
use Getopt::Long qw(:config no_ignore_case);
use Filesys::SmbClientParser;
use POSIX;

our %info;
our $opt_help;
our $opt_version;
our $opt_host;
our $opt_user;
our $opt_pass;
our $opt_domain;
our $opt_debug;
our $opt_dir;
our $opt_file;
our $opt_warn;
our $opt_crit;
our $opt_ok;
our $opt_err;

%info = (
	'autor'       => 'Raul Liota',
    'autor_email' => 'raul.liota@interop.com.br',
    'version'     => '0.1' ,
    'plugin_name' => basename($0)
);

sub main {

	&parseArgs;

	my $ontem = &yesterday;
	my $sucesso=0;
	my $falha=0;

	my $smb = new Filesys::SmbClientParser (undef,
					(user 		=>	$opt_user,
					password	=>	$opt_pass,
					workgroup	=>	$opt_domain,
					debug		=> 	$opt_debug	
					));

	$smb->Host($opt_host);
	$smb->Share($opt_dir);
	$smb->get($opt_file,"/tmp/log_remocao.log") or die("THERE WAS AN ERROR SMBERR: " . $smb->err);
	
	open(FILE,"/tmp/log_remocao.log");

	while(<FILE>) {
		if (m/^(\d{2}\/\d{2}\/\d{4}).*: Imagem.*\" (.*)/g) {
			if ($1 eq $ontem) {
            	if ($2 =~ m/$opt_ok/g ){
            		$sucesso++;
            	} elsif ($2 =~ m/$opt_err/g ) {
            		$falha++;
            	}
        	}
		}
	}
	
	close(FILE); 
	unlink("/tmp/log_remocao.log");

	my $perf = "removidas=$sucesso;$opt_warn;$opt_crit;0; falha=$falha;$opt_warn;$opt_crit;0;"; 
	if (($falha >= $opt_warn) && ($falha < $opt_crit)) {
		print "WARNING - Removidas: $sucesso - Nao removidas: $falha | $perf\n";
	} elsif ($falha > $opt_crit) {
		print "CRITICAL - Removidas: $sucesso - Nao removidas: $falha | $perf\n"
	} else {
		print "OK - Removidas: $sucesso - Nao removidas: $falha | $perf\n";
	} 	
	
}

sub yesterday {
	my $yestertime = time - 86400;
	my $month = (localtime $yestertime)[4] + 1;
	my $day = (localtime $yestertime)[3];
	my $year = (localtime $yestertime)[5] + 1900;
	my $data = sprintf ("%02d/%02d/%d", $day, $month, $year);
	return ($data);
}

sub parseArgs {
	GetOptions (
		"h|help"		=> \$opt_help,
		"v|version"		=> \$opt_version,
    	"H|host=s"		=> \$opt_host,
    	"u|user=s"  	=> \$opt_user,
    	"p|password=s"  => \$opt_pass,
    	"W|domain=s"    => \$opt_domain,
    	"d|debug=s"		=> \$opt_debug,
    	"D|dir=s"   	=> \$opt_dir,
    	"f|file=s"  	=> \$opt_file,
		"w|warning=i"	=> \$opt_warn,
		"c|critical=i"	=> \$opt_crit,
		"o|ok=s"		=> \$opt_ok,
		"e|erro=s"		=> \$opt_err	
    );	
	if (!defined($opt_host) && !defined($opt_user) && !defined($opt_pass) && !defined($opt_dir) && !defined($opt_file) && !defined($opt_version)) {
		&printHelp;
    	exit(3);
  	}
    if (defined($opt_help)) {
        &printHelp;
    }
    if (defined($opt_version)) {
        print "Version: $info{version}\n";
    }

}

sub printHelp {
	&printUsage;
	print <<EOT
	Autor : $info{autor}
	Email : $info{autor_email}
	Versao: $info{version}
	
	Faz um parse de um arquivo de log compartilhado através de SMB para verificação se as imagens das cameras da Cimfel foram removidas corretamente.

	Parametros:

	-h | --help		Exibe o a página de ajuda.
	-v | --version	Exibe a versão do plugin.
	-u | --user  	Usuario para acesso ao compartilhamento.
	-p | --password Senha do usuario para acesso ao compartilhamento.
	-H | --host   IP/HOSTNAME do host onde se encontra o compartilhamento. 
	-W | --domain	Domínio do host onde está o compartilhamento.
	-D | --dir		Diretório compartilhado.
	-f | --file		Arquivo de log compartilhado.
	-d | --debug	Utilizado para debug do smbclient.
EOT
};

sub printUsage {
	print <<EOH
	Exemplos:

	$info{plugin_name} -h
	$info{plugin_name} -v
	$info{plugin_name} -s <ip> -u <usuario> -p <senha> -W [dominio] -D <diretório> -f <arquivo> -d [level_debug_smbclient]\n
EOH
};

&main;
